// 统一认证服务
import keycloak from '../config/keycloak';

// 用户信息存储
let currentUser = null;

// 认证服务
const authService = {
  // 初始化认证服务
  init: async () => {
    // 这里应该是从localStorage或cookie中获取保存的token
    // 然后验证token有效性，如果有效则获取用户信息
    // 如果无效则清除本地token
    
    // 模拟从本地存储获取用户信息
    const savedUser = localStorage.getItem('currentUser');
    if (savedUser) {
      try {
        currentUser = JSON.parse(savedUser);
      } catch (e) {
        console.error('解析保存的用户信息失败', e);
        authService.logout();
      }
    }
    
    return currentUser;
  },
  
  // 登录
  login: async (username, password) => {
    // 实际项目中，这里应该调用统一认证平台的登录API
    // 返回用户信息和token
    
    // 模拟登录
    if (username === 'admin' && password === 'admin') {
      currentUser = {
        id: 'admin',
        name: '管理员',
        roles: ['admin'],
        token: 'mock-jwt-token-' + new Date().getTime()
      };
      
      // 保存用户信息到本地存储
      localStorage.setItem('currentUser', JSON.stringify(currentUser));
      
      return currentUser;
    }
    
    throw new Error('用户名或密码错误');
  },
  
  // 登出
  logout: () => {
    // 清除用户信息
    currentUser = null;
    localStorage.removeItem('currentUser');
  },
  
  // 获取当前用户
  getCurrentUser: () => {
    // 如果当前用户为空但 Keycloak 已认证，尝试从 Keycloak 获取基本信息
    if (!currentUser && keycloak.authenticated) {
      currentUser = {
        id: keycloak.subject,
        roles: keycloak.realmAccess?.roles || [],
        token: keycloak.token
      };
    }
    return currentUser;
  },
  
  // 获取用户ID - 优先从 Keycloak 获取
  getUserId: () => {
    // 直接从 Keycloak 获取用户 ID (subject)
    if (keycloak.authenticated) {
      return keycloak.subject;
    }
    // 回退到本地存储的用户信息
    return currentUser ? currentUser.id : null;
  },
  
  // 获取认证token - 优先从 Keycloak 获取
  getToken: () => {
    // 直接从 Keycloak 获取 token
    if (keycloak.authenticated) {
      return keycloak.token;
    }
    // 回退到本地存储的 token
    return currentUser ? currentUser.token : null;
  },
  
  // 检查是否已认证 - 使用 Keycloak 认证状态
  isAuthenticated: () => {
    return keycloak.authenticated;
  },
  
  // 检查是否有权限 - 从 Keycloak 角色中检查
  hasPermission: (permission) => {
    // 从 Keycloak 角色中检查权限
    if (keycloak.authenticated && keycloak.realmAccess && keycloak.realmAccess.roles) {
      // 简单实现：如果用户有 admin 角色，则拥有所有权限
      if (keycloak.realmAccess.roles.includes('admin')) {
        return true;
      }
      
      // 检查特定权限
      return keycloak.realmAccess.roles.includes(permission);
    }
    
    return false;
  },
  
  // 更新用户信息 - 从 Keycloak 刷新用户信息
  updateUserInfo: async () => {
    if (keycloak.authenticated) {
      try {
        const profile = await keycloak.loadUserProfile();
        
        currentUser = {
          id: keycloak.subject,
          name: profile.firstName + ' ' + profile.lastName,
          username: profile.username,
          email: profile.email,
          roles: keycloak.realmAccess?.roles || [],
          token: keycloak.token
        };
        
        console.log('Auth Service: 用户信息已更新', currentUser);
        return currentUser;
      } catch (error) {
        console.error('Auth Service: 更新用户信息失败', error);
      }
    }
    
    return currentUser;
  }
};

export default authService;
